/**
 * 测试 按位非、按位与、按位或、按位异或 
 */

let x = 5 ; // 0000_0000_0000_0000_0000_0000_0000_0101

// 按位非( ~ ) 也叫做按位取反，就是对每个二进制位逐位取反
console.log( ~x ); // 1111_1111_1111_1111_1111_1111_1111_1010

let a = 5 ; // 0000_0000_0000_0000_0000_0000_0000_0101
let b = 7 ; // 0000_0000_0000_0000_0000_0000_0000_0111

// 按位与: 两数相应位置的二进制位都为1时结果才为1
// a: 0000_0000_0000_0000_0000_0000_0000_0101
// &
// b: 0000_0000_0000_0000_0000_0000_0000_0111
//  ------------------------------------------
//    0000_0000_0000_0000_0000_0000_0000_0101
console.log( a & b ); // 5

// 按位或: 两数相应位置的二进制位只要有一方为1时结果就是1
// a: 0000_0000_0000_0000_0000_0000_0000_0101
// |
// b: 0000_0000_0000_0000_0000_0000_0000_0111
//  ------------------------------------------
//    0000_0000_0000_0000_0000_0000_0000_0111
console.log( a | b ); // 7


// 按位异或: 两数相应位置的二进制位不同时结果才为1
// a: 0000_0000_0000_0000_0000_0000_0000_0101
// ^
// b: 0000_0000_0000_0000_0000_0000_0000_0111
// -------------------------------------------
//    0000_0000_0000_0000_0000_0000_0000_0010
console.log( a ^ b ); // 2